package cn.itbeien.manager.controller;

import cn.itbeien.manager.config.NacosConfig;
import cn.itbeien.core.util.RandomStr;
import cn.itbeien.core.util.zxingqr.QrcodeUtil;
import cn.itbeien.entity.MerchantInfo;
import cn.itbeien.manager.service.IMerchantService;
import cn.itbeien.vo.QrVO;
import com.alibaba.fastjson2.JSON;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.nio.file.Path;

/**
 * @author beien
 * @date 2024-03-12 14:43
 * Copyright© 2024 beien
 * 1.业务路由方法(跳转小程序，跳转到支付页面)
 * 2.商户注册(商户表，商户和二维码中间表)
 * 3.销售使用批量生成二维码功能，生成码图再发展商户
 *
 * 系统权限
 * 用户管理
 * 角色管理
 * 菜单管理
 * 数据字典
 *
 * 商户管理
 *
 * 订单管理
 */
@Controller
//@RestController //默认返回的是json数据 @Controller+@ResponseBody
@RequestMapping("system")
@Slf4j
public class SystemController {

    @Autowired
    private NacosConfig nacosConfig;

    @Autowired
    private IMerchantService merchantService;


    /**
     * 批量生成二维码
     * 销售部->批量生成码图->发展商户->商户用二维码收款
     * 二维码图片保存到本地磁盘或则minio
     * multipartFile  logo
     */
    @PostMapping("createQr")
    @ResponseBody
    public  String createQr(MultipartFile multipartFile, QrVO qrVO){
        String result  = "fail";
        try{
            //根据提交的数量决定生成多少张二维码
            Integer number = qrVO.getNumber();
            QrcodeUtil qrcodeUtil = new QrcodeUtil();
            if(number == 0){
                //从nacos中获取对应的值
                number = 100;
            }else{
                String qrUrl = nacosConfig.getQrUlr();
                for(int i=0;i<number;i++){
                    String code = RandomStr.generateRandomString(15);
                    Path filePath = new File(nacosConfig.getImgUrl()+code+".png").toPath();
                    qrUrl=qrUrl+"?code="+code;
                    //创建普通的二维码,不需要logo
                    qrcodeUtil.createQr(qrUrl,filePath);
                }
            }
            result = "success";
        }catch(Exception e){
            log.error("商户生成二维码异常:{}",e);
        }
        return result;
    }

    /**
     * 商户注册和用户聚合支付路由方法
     * @param code 二维码编号
     * @return
     */
    @GetMapping("route")
    public String route(@RequestParam("code") String code){
        String result ="";

        merchantService.bussinessRouter(code);

        return result;
    }


    public String regMerchant(@RequestBody String data){
        String result = "fail";
       try{
           MerchantInfo merchantInfo = JSON.parseObject(data,MerchantInfo.class);
           int number = merchantService.regMerchant(merchantInfo);
           if(number == 0){
               result = "success";
           }
       }catch (Exception e){
            log.error(e.getMessage());
       }
       return result;
    }
}
